﻿#include "algskuoffset.h"

#include "commonfunctionset.h"
#include "../algorithm_log.h"

AlgSkuOffset::AlgSkuOffset()
{}

AlgSkuOffset::~AlgSkuOffset()
{}

#define JIG_X (230)
#define JIG_Y (405)

// 夹具长810 宽是460
bool AlgSkuOffset::Init(const AlgInit& init, const QString& other)
{
	m_base = init.base;
	if (m_base.x == 0 && m_base.y == 0 && m_base.z == 0) {
		log_error("base is 0, init failed");
		return false;
	}
	m_base.b = 0;
	m_base.c = 0;

	bool flag = false;
	m_dir = other.toInt(&flag);
	if (flag && m_dir >= 0 && m_dir <= 4) {
		log_trace("Alg set dir = {}", m_dir);
	} else {
		log_error("other = {} is error", other);
		return false;
	}
	return true;
}

bool AlgSkuOffset::InitSkuInfo(const AlgSkuInfo& sku, QString& result)
{
	if (sku.size.height == 0 || sku.size.width == 0 || sku.size.length == 0) {
		result = "物料尺寸不能为0";
	}
	m_sku = sku.size;
	return true;
}

bool AlgSkuOffset::Calculate(const QString& input, Position& pos, QString& output)
{
	int num = input.toInt();
	if (num <= 0) {
		output = "输入参数异常：num =0";
		return false;
	}
	Position skuInBox = {};
	if (m_dir == 0) {	// 横向：长对x
		skuInBox.x = m_sku.length / 2;
		skuInBox.z = m_sku.height;
		skuInBox.y = m_sku.width * num / 2;
		skuInBox.a = 0;
		skuInBox.b = 0;
		skuInBox.c = 0;
	} else if (m_dir == 1) {	// 纵向： 宽对x
		skuInBox.y = m_sku.length / 2;
		skuInBox.z = m_sku.height;
		skuInBox.x = m_sku.width * num / 2;
		skuInBox.a = -90;
		skuInBox.b = 0;
		skuInBox.c = 0;
	} else if (m_dir == 2) {	// 反横向
		skuInBox.x = m_sku.length / 2;
		skuInBox.z = m_sku.height;
		skuInBox.y = m_sku.width * num / 2;
		skuInBox.a = 180;
		skuInBox.b = 0;
		skuInBox.c = 0;
	} else if (m_dir == 3) {	// 反纵向： 宽对x
		skuInBox.y = m_sku.length / 2;
		skuInBox.z = m_sku.height;
		skuInBox.x = m_sku.width * num / 2;
		skuInBox.a = 90;
		skuInBox.b = 0;
		skuInBox.c = 0;
	} else if (m_dir == 4) {
		skuInBox.y = 0;
		skuInBox.z = m_sku.height;
		skuInBox.x = 0;
		skuInBox.a = num > 1 ? 90 : 0;
		skuInBox.b = 0;
		skuInBox.c = 0;
	} else {
		output = "业务线物料方向配置异常";
		return false;
	}
	log_trace("SkuInBox = ({}, {},{}, {})", skuInBox.x, skuInBox.y, skuInBox.z, skuInBox.a);

	pos = CommonFun::TransAToBCoordinateSystem(skuInBox, m_base);
	log_trace("SkuInRob = ({}, {},{}, {}, {}, {})", pos.x, pos.y, pos.z, pos.a, pos.b, pos.c);
	return true;
}
bool AlgSkuOffset::ExcuteCmd(int cmd, const QString& input, QString& output)
{
	return false;
}
